package com.example.charges.dati;

import java.util.ArrayList;
import java.util.Arrays;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

import com.molinari.androidstructure.data.db.DatabaseAndroid;

public class DatabaseAndroidCharge extends DatabaseAndroid {
	
	private static final String DATABASE_NAME = "Charge.db";
	// cambiando la versione viene eseguito l'onupgrade e quindi rieseguito il create
	private static final int DATABASE_VERSION = 2;

	public DatabaseAndroidCharge(Context context, CursorFactory cursorFactory) {
		super(context, DATABASE_NAME, cursorFactory, DATABASE_VERSION);
	}
	
	public DatabaseAndroidCharge(final Context context) {
		super(context, DATABASE_NAME, DATABASE_VERSION);
	}

	@Override
	public String[] queryUpdateDb() {
		ArrayList<String> listSql = new ArrayList<String>();
		// e' necessario eliminare le tabelle se gi� create altrimenti non funziona l'aggiornamento
		listSql.add("DROP TABLE IF EXISTS " + "Utenti");
		listSql.add("DROP TABLE IF EXISTS " + "gruppi");
		listSql.add("DROP TABLE IF EXISTS " + "lookAndFeel");
		listSql.add("DROP TABLE IF EXISTS " + "risparmio");
		listSql.add("DROP TABLE IF EXISTS " + "cat_spese");
		listSql.add("DROP TABLE IF EXISTS " + "single_spesa");
		listSql.add("DROP TABLE IF EXISTS " + "note");
		listSql.add("DROP TABLE IF EXISTS " + "entrate");
		listSql.add("DROP TABLE IF EXISTS " + "budget");
		listSql.addAll(Arrays.asList(queryCreateDb()));
		return listSql.toArray(new String[listSql.size()]);
	}

	@Override
	public String[] queryCreateDb() {
		ArrayList<String> listSql = new ArrayList<String>();
		String sql = new String();
		sql = "CREATE TABLE Utenti (idUtente INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , nome TEXT NOT NULL , cognome TEXT NOT NULL , username TEXT NOT NULL  UNIQUE , password TEXT NOT NULL );";
		listSql.add(sql);
		sql = "CREATE TABLE gruppi (idGruppo INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , nome TEXT NOT NULL , descrizione TEXT);";
		listSql.add(sql);
		sql = "CREATE TABLE lookAndFeel (idLook INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , nome TEXT NOT NULL , valore TEXT NOT NULL , usato INTEGER NOT NULL );";
		listSql.add(sql);
		sql = "CREATE TABLE risparmio (idRisparmio INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , PerSulTotale DOUBLE NOT NULL , nomeOggetto TEXT, costoOggetto DOUBLE);";
		listSql.add(sql);
		sql = "CREATE TABLE cat_spese (idCategoria  INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, descrizione TEXT NOT NULL,importanza TEXT NOT NULL,nome TEXT NOT NULL,idGruppo INTEGER, CONSTRAINT keygruppo FOREIGN KEY (idGruppo) REFERENCES gruppi (idGruppo));";
		listSql.add(sql);
		sql = "CREATE TABLE budget (idBudget  INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,idCategorie INTEGER NOT NULL UNIQUE,percSulTot DOUBLE NOT NULL,CONSTRAINT keyspesa FOREIGN KEY (idCategorie) REFERENCES cat_spese (idCategoria));";
		listSql.add(sql);
		sql = "CREATE TABLE single_spesa (idSpesa INTEGER PRIMARY KEY  NOT NULL ,Data TEXT NOT NULL ,inEuro INTEGER NOT NULL ,descrizione TEXT NOT NULL ,idCategorie INTEGER NOT NULL ,nome TEXT NOT NULL ,idUtente INTEGER NOT NULL ,dataIns TEXT);";
		listSql.add(sql);
		sql = "CREATE TABLE note (idNote INTEGER PRIMARY KEY  NOT NULL ,nome TEXT NOT NULL ,descrizione TEXT NOT NULL ,idUtente INTEGER NOT NULL ,data TEXT NOT NULL ,dataIns TEXT NOT NULL );";
		listSql.add(sql);
		sql = "CREATE TABLE entrate (idEntrate INTEGER PRIMARY KEY NOT NULL, descrizione TEXT NOT NULL, Fisse_o_Var TEXT NOT NULL , inEuro INTEGER NOT NULL , data TEXT NOT NULL , nome TEXT NOT NULL , idUtente INTEGER NOT NULL , dataIns TEXT)";
		listSql.add(sql);
		
		return listSql.toArray(new String[listSql.size()]);
	}
}
